package com.tul.vapp.servicecenter.client;

import java.util.List;
import java.util.Map;
import java.util.Set;

import com.tul.vapp.servicecenter.common.StatusEnum;

/**
 * 客户端
 * 
 * @author wwxiang
 * @since 2017/12/28.
 */
public interface IConfigClient {

	/**
	 * 获取所有的命名空间
	 * 
	 * @return 命名空间
	 */
	Set<String> getNamespaces();

	/**
	 * 获取配置
	 * 
	 * @param namespace 命名空间(文件名)
	 * @param key 配置key
	 * @return 配置值
	 */
	String getProperty(String namespace, String key);

	/**
	 * 根据命名空间获取所有配置项
	 * 
	 * @param namespace 命名空间
	 * @return 配置值
	 */
	Map<String, String> getProperties(String namespace);

	/**
	 * 获取配置
	 *
	 * @param key 配置key
	 * @return 配置值
	 */
	String getProperty(String key);

	/**
	 * 从整个库中找出所有名称为key的配置项<br/>
	 * 此处没有指明命名空间，因此可能存在多个值
	 *
	 * @param key 键
	 * @return 所有键值
	 */
//	Set<String> scanProperty(String key);

	/**
	 * 给服务中心报告信息
	 * 
	 * @param statusEnum 信息名称
	 * @param value 信息值
	 */
	void report(StatusEnum statusEnum, String value);

	/**
	 * 给服务中心报告信息,自定义应用名称
	 *
	 * @param statusEnum 信息名称
	 * @param value 信息值
	 * @param appName 应用名称
	 */
	void report(StatusEnum statusEnum, String value, String appName);

	/**
	 * 加载本地配置文件，默认为在resources目录下
	 *
	 * @param nameSpaceList nameSpaceList
	 */
	void loadFile(List<String> nameSpaceList);

	/**
	 * 订阅当前项目配置数据
	 */
	void subscribe();
}
